#include <bits/stdc++.h>
using namespace std;
int n, k, a[100005], f[100005][30],
    b[100005]; // a[i]为洗牌规则，b数组存储洗牌后的数字，
// f[i][j]为节点i向上2的j次方的节点是谁，初始化f[i][0]就是节点i向上2的0次方的节点也就是a[i]
void st() {
  // 外层必须先枚举j，否则例如求f[1][2]会转移到f[f[1][1]][1],而此时没有该值，导致错误
  for (int j = 1; (1 << j) <= k;
       j++) // 保证2的j次方小于等于k，不能洗超过k的次数
  {
    for (int i = 1; i <= n; i++) // 枚举每一个起点
    {
      f[i][j] = f
          [f[i][j - 1]]
          [j -
           1]; // 节点i向上2的j次方转移到节点i移动2的j-1次方后的那个点再移动2的j-1次方。
    }
  }
}
int main() {
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    f[i][0] = a[i]; // 初始化
  }
  st();
  for (int i = 1; i <= n; i++) {
    // 快速幂
    int y = k;
    int ans = 0;
    int x = i;
    while (y) {
      if (y & 1) {
        x = f[x][ans];
      }
      ans++;
      y >>= 1;
    }
    b[x] = i; // 赋值
  }
  for (int i = 1; i <= n; i++)
    cout << b[i] << " ";
  return 0;
}